home *** CD-ROM | disk | FTP | other *** search
/ Especial Multimedia / Especial Multimedia.iso / Multimed / Dibujo / RENDC102.ZIP / RDC.H_ / RDC
Text File  |  1996-05-12  |  17KB  |  422 lines

  1. /*
  2.  * rdc.h - header file for RenderDotC
  3.  *
  4.  * RenderDotC (RDC) is:
  5.  *      Copyright (c) 1996 by Dot C Software, Inc.
  6.  *      All Rights Reserved.
  7.  */
  8.  
  9. #ifndef RDC_H
  10. #define RDC_H
  11.  
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15.  
  16. /*
  17.  * Definitions of Abstract Types used in RenderDotC Interface.
  18.  */
  19. typedef short RDCboolean;
  20. typedef short RDCenum;
  21. typedef long RDCint;
  22. typedef unsigned short RDCquark;
  23. typedef float RDCfloat;
  24.  
  25. typedef RDCfloat RDCpoint[3];
  26. typedef RDCfloat RDCpointw[4];
  27. typedef RDCfloat RDCcolor[3];
  28. typedef RDCfloat RDCmatrix[4][4];
  29. typedef RDCfloat RDCbasis[4][4];
  30. typedef RDCfloat RDCbound[6];
  31.  
  32. typedef void RDCvoid;
  33. typedef RDCvoid RDCobject;
  34. typedef RDCvoid RDClight;
  35.  
  36. typedef RDCvoid (*RDCsubdivideFunc)(RDCvoid *, RDCfloat);
  37. typedef RDCvoid (*RDCfreeFunc)(RDCvoid *);
  38. typedef RDCvoid (*RDCerrorFunc)(RDCint, RDCint, const char *);
  39. typedef RDCboolean (*RDCprogressFunc)(RDCint);
  40. typedef RDCfloat (*RDCfilterFunc)(RDCfloat, RDCfloat, RDCfloat, RDCfloat);
  41.  
  42. /*
  43.  * Constants
  44.  */
  45. #define RDC_FALSE                           0
  46. #define RDC_TRUE                            1
  47. #define RDC_INFINITY                        1.0e38
  48. #define RDC_EPSILON                         1.0e-10
  49. #define RDC_NULL                            0
  50.  
  51. /*
  52.  * Enumerators
  53.  */
  54. /* Masks */
  55. #define RDC_ENUM_CLASS                      0xff00
  56. #define RDC_ENUM_SERIAL                     0x00ff
  57.  
  58. /* Filters */
  59. #define RDC_GAUSSIAN_FILTER                 0x0100
  60. #define RDC_CATMULLROM_FILTER               0x0101
  61. #define RDC_BOX_FILTER                      0x0102
  62. #define RDC_TRIANGLE_FILTER                 0x0103
  63. #define RDC_SINC_FILTER                     0x0104
  64.  
  65. /* File Formats */
  66. #define RDC_BYTESTREAM                      0x0200
  67. #define RDC_TIFF                            0x0201
  68.  
  69. /* Display Mode */
  70. #define RDC_RGB                             0x0301
  71. #define RDC_A                               0x0302
  72. #define RDC_Z                               0x0304
  73. #define RDC_RGBA                            (RDC_RGB | RDC_A)
  74. #define RDC_RGBZ                            (RDC_RGB | RDC_Z)
  75. #define RDC_AZ                              (RDC_A | RDC_Z)
  76. #define RDC_RGBAZ                           (RDC_RGBA | RDC_Z)
  77.  
  78. /* Hider Name */
  79. #define RDC_ZBUFFER                         0x0400
  80. #define RDC_PAINT                           0x0401
  81.  
  82. /* Shading Model */
  83. #define RDC_FLAT                            0x0500
  84. #define RDC_GOURAUD                         0x0501
  85.  
  86. /* Orientations */
  87. #define RDC_LH                              0x0600
  88. #define RDC_RH                              0x0601
  89. #define RDC_INSIDE                          0x0602
  90. #define RDC_OUTSIDE                         0x0603
  91. #define RDC_REVERSE                         0x0604
  92.  
  93. /* Patch Types */
  94. #define RDC_BILINEAR                        0x0700
  95. #define RDC_BICUBIC                         0x0701
  96.  
  97. /* Basis Applications */
  98. #define RDC_UBASIS                          0x0800
  99. #define RDC_VBASIS                          0x0801
  100. #define RDC_UVBASIS                         0x0802
  101.  
  102. /* Cubic Patch Basis */
  103. #define RDC_BEZIER_BASIS                    0x0900
  104. #define RDC_BSPLINE_BASIS                   0x0901
  105. #define RDC_CATMULLROM_BASIS                0x0902
  106. #define RDC_HERMITE_BASIS                   0x0903
  107. #define RDC_POWER_BASIS                     0x0904
  108.  
  109. /* Patch Mesh Treatment */
  110. #define RDC_WRAP                            0x0a00
  111. #define RDC_NOWRAP                          0x0a01
  112.  
  113. /* Error Severity Levels */
  114. #define RDC_INFO                            0x0b01
  115. #define RDC_WARNING                         0x0b02
  116. #define RDC_ERROR                           0x0b04
  117. #define RDC_SEVERE                          0x0b08
  118. #define RDC_IW                              (RDC_INFO | RDC_WARNING)
  119. #define RDC_IE                              (RDC_INFO | RDC_ERROR)
  120. #define RDC_IS                              (RDC_INFO | RDC_SEVERE)
  121. #define RDC_WE                              (RDC_WARNING | RDC_ERROR)
  122. #define RDC_WS                              (RDC_WARNING | RDC_SEVERE)
  123. #define RDC_ES                              (RDC_ERROR | RDC_SEVERE)
  124. #define RDC_IWE                             (RDC_IW | RDC_ERROR)
  125. #define RDC_IWS                             (RDC_IW | RDC_SEVERE)
  126. #define RDC_WES                             (RDC_WE | RDC_SEVERE)
  127. #define RDC_IWES                            (RDC_IWE | RDC_SEVERE)
  128.  
  129. /* Error Handlers */
  130. #define RDC_IGNORE                          0x0c00
  131. #define RDC_PRINT                           0x0c01
  132. #define RDC_ABORT                           0x0c02
  133.  
  134. /* Variable classes */
  135. #define RDC_NO_CLASS                        0x0d00
  136. #define RDC_CONST_CLASS                     0x0d01
  137. #define RDC_VARY_CLASS                      0x0d02
  138. #define RDC_VERTEX_CLASS                    0x0d03
  139.  
  140. /* Variable types */
  141. #define RDC_NO_TYPE                         0x0e00
  142. #define RDC_FLOAT_TYPE                      0x0e01
  143. #define RDC_INTEGER_TYPE                    0x0e02
  144. #define RDC_STRING_TYPE                     0x0e03
  145. #define RDC_PAIR_TYPE                       0x0e04
  146. #define RDC_POINT_TYPE                      0x0e05
  147. #define RDC_POINTW_TYPE                     0x0e06
  148. #define RDC_COLOR_TYPE                      0x0e07
  149.  
  150. /*
  151.  * Predefined quarks
  152.  */
  153. /* Shading variables */
  154. #define RDC_POINT                           ((RDCquark) 1)
  155. #define RDC_POINTW                          ((RDCquark) 2)
  156. #define RDC_HEIGHT                          ((RDCquark) 3)
  157. #define RDC_NORMAL                          ((RDCquark) 4)
  158. #define RDC_PLANE                           ((RDCquark) 5)
  159. #define RDC_COLOR                           ((RDCquark) 6)
  160. #define RDC_OPACITY                         ((RDCquark) 7)
  161.  
  162. /* Surfaces */
  163. #define RDC_CONSTANT                        ((RDCquark) 8)
  164. #define RDC_DIFFUSE                         ((RDCquark) 9)
  165. #define RDC_METAL                           ((RDCquark) 10)
  166. #define RDC_PLASTIC                         ((RDCquark) 11)
  167. #define RDC_KA                              ((RDCquark) 12)
  168. #define RDC_KD                              ((RDCquark) 13)
  169. #define RDC_KS                              ((RDCquark) 14)
  170. #define RDC_ROUGHNESS                       ((RDCquark) 15)
  171. #define RDC_SPECULARCOLOR                   ((RDCquark) 16)
  172.  
  173. /* Lights */
  174. #define RDC_AMBIENT                         ((RDCquark) 17)
  175. #define RDC_OMNI                            ((RDCquark) 18)
  176. #define RDC_DISTANT                         ((RDCquark) 19)
  177. #define RDC_SPOT                            ((RDCquark) 20)
  178. #define RDC_INTENSITY                       ((RDCquark) 21)
  179. #define RDC_LIGHTCOLOR                      ((RDCquark) 22)
  180. #define RDC_FROM                            ((RDCquark) 23)
  181. #define RDC_TO                              ((RDCquark) 24)
  182. #define RDC_CONEANGLE                       ((RDCquark) 25)
  183. #define RDC_CONEDELTAANGLE                  ((RDCquark) 26)
  184. #define RDC_BEAMDISTRIBUTION                ((RDCquark) 27)
  185.  
  186. /* Atmospheres */
  187. #define RDC_DEPTHCUE                        ((RDCquark) 28)
  188. #define RDC_FOG                             ((RDCquark) 29)
  189. #define RDC_HITHER                          ((RDCquark) 30)
  190. #define RDC_YON                             ((RDCquark) 31)
  191. #define RDC_BACKGROUND                      ((RDCquark) 32)
  192. #define RDC_DISTANCE                        ((RDCquark) 33)
  193.  
  194. /* Coordinate Systems */
  195. #define RDC_RASTER                          ((RDCquark) 34)
  196. #define RDC_IMAGE                           ((RDCquark) 35)
  197. #define RDC_EYE                             ((RDCquark) 36)
  198. #define RDC_WORLD                           ((RDCquark) 37)
  199. #define RDC_MODEL                           ((RDCquark) 38)
  200.  
  201. /*
  202.  * Declarations of All the RenderDotC Interface Subroutines
  203.  */
  204. extern RDCquark
  205.     rdcQuark(const char *string);
  206.  
  207. extern RDCvoid
  208.     rdcFrameBegin(void),
  209.     rdcFrameEnd(void),
  210.     rdcSceneBegin(void),
  211.     rdcSceneEnd(void);
  212.  
  213. extern RDCvoid
  214.     rdcRasterViewport(RDCint left, RDCint right, RDCint top, RDCint bot),
  215.     rdcRasterAspect(RDCfloat aspect),
  216.     rdcImageWindow(RDCfloat left, RDCfloat right, RDCfloat bot, RDCfloat top),
  217.     rdcImageAspect(RDCfloat aspect),
  218.     rdcImageCrop(RDCfloat xmin, RDCfloat xmax, RDCfloat ymin, RDCfloat ymax),
  219.     rdcViewOrthographic(void),
  220.     rdcViewPerspective(RDCfloat fov),
  221.     rdcViewIdentity(void),
  222.     rdcClip(RDCfloat hither, RDCfloat yon);
  223.  
  224. extern RDCvoid
  225.     rdcSampleAdaptive(RDCfloat variation),
  226.     rdcSampleUniform(RDCfloat xsamples, RDCfloat ysamples),
  227.     rdcSampleJitter(RDCfloat ampl),
  228.     rdcFilter(RDCenum filter),
  229.     rdcCustomFilter(RDCfilterFunc filterfunc),
  230.     rdcFilterWidth(RDCfloat xwidth, RDCfloat ywidth),
  231.     rdcColorGain(RDCfloat gain),
  232.     rdcColorGamma(RDCfloat gamma),
  233.     rdcColorQuantize(RDCint one, RDCint min, RDCint max),
  234.     rdcColorJitter(RDCfloat ampl),
  235.     rdcDepthQuantize(RDCint one, RDCint min, RDCint max),
  236.     rdcDepthJitter(RDCfloat ampl),
  237.     rdcOutputDisplay(const char *windowname),
  238.     rdcOutputFile(RDCenum format, const char *filename),
  239.     rdcOutputSamples(RDCenum samples);
  240.  
  241. extern RDCvoid
  242.     rdcHider(RDCenum type),
  243.     rdcColorSpace(RDCint n, const RDCfloat *nRGB, const RDCfloat *RGBn),
  244.     rdcTune(RDCint maxtess, RDCint xbucket, RDCint ybucket);
  245.  
  246. extern RDCvoid
  247.     rdcAttributePush(void),
  248.     rdcAttributePop(void),
  249.     rdcColor(const RDCfloat *color),
  250.     rdcOpacity(const RDCfloat *color);
  251.  
  252. extern RDClight
  253.     *rdcLightSource(RDCquark name, ...),
  254.     *rdcLightSourceV(RDCquark name,
  255.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms);
  256.  
  257. extern RDCvoid
  258.     rdcLightSwitch(const RDClight *light, RDCboolean ononff),
  259.     rdcSurface(RDCquark name, ...),
  260.     rdcSurfaceV(RDCquark name,
  261.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  262.     rdcAtmosphere(RDCquark name, ...),
  263.     rdcAtmosphereV(RDCquark name,
  264.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  265.     rdcShadingRate(RDCfloat size),
  266.     rdcShadingModel(RDCenum type),
  267.     rdcMatteObject(RDCboolean onoff);
  268.  
  269. extern RDCvoid
  270.     rdcBound(const RDCfloat *bound),
  271.     rdcFlatness(RDCfloat value),
  272.     rdcOrientation(RDCenum orientation),
  273.     rdcBackface(RDCboolean onoff);
  274.  
  275. extern RDCvoid
  276.     rdcLoadIdentity(void),
  277.     rdcLoadMatrix(const RDCfloat matrix[4][4]),
  278.     rdcMultMatrix(const RDCfloat matrix[4][4]),
  279.     rdcPerspective(RDCfloat fov),
  280.     rdcTranslate(RDCfloat dx, RDCfloat dy, RDCfloat dz),
  281.     rdcRotate(RDCfloat angle, RDCfloat dx, RDCfloat dy, RDCfloat dz),
  282.     rdcScale(RDCfloat sx, RDCfloat sy, RDCfloat sz),
  283.     rdcSkew(RDCfloat angle, RDCfloat dx1, RDCfloat dy1, RDCfloat dz1,
  284.         RDCfloat dx2, RDCfloat dy2, RDCfloat dz2);
  285.  
  286. extern RDCvoid
  287.     rdcMarkSpace(RDCquark name);
  288.  
  289. extern RDCpoint
  290.     *rdcProjectPoints(RDCquark fromspace, RDCquark tospace,
  291.         RDCint n, RDCpoint *points);
  292.  
  293. extern RDCvoid
  294.     rdcMatrixPush(void),
  295.     rdcMatrixPop(void),
  296.     rdcObjectName(const char *name),
  297.     rdcGroupName(const char *name);
  298.  
  299. extern RDCvoid
  300.     rdcPolygon(RDCint nverts, ...),
  301.     rdcPolygonV(RDCint nverts,
  302.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  303.     rdcGeneralPolygon(RDCint nloops, const RDCint *nverts, ...),
  304.     rdcGeneralPolygonV(RDCint nloops, const RDCint *nverts,
  305.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  306.     rdcPolygonMesh(RDCint npolys, const RDCint *nverts, const RDCint *verts,
  307.         ...),
  308.     rdcPolygonMeshV(RDCint npolys, const RDCint *nverts, const RDCint *verts,
  309.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  310.     rdcGeneralPolygonMesh(RDCint npolys, const RDCint *nloops,
  311.         const RDCint *nverts, const RDCint *verts, ...),
  312.     rdcGeneralPolygonMeshV(RDCint npolys, const RDCint *nloops,
  313.         const RDCint *nverts, const RDCint *verts,
  314.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  315.     rdcBasis(RDCenum which, RDCenum basis),
  316.     rdcCustomBasis(RDCenum which, const RDCfloat basis[4][4], RDCint step),
  317.     rdcPatch(RDCenum type, ...),
  318.     rdcPatchV(RDCenum type,
  319.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  320.     rdcPatchMesh(RDCenum type, RDCint nu, RDCenum uwrap,
  321.         RDCint nv, RDCenum vwrap, ...),
  322.     rdcPatchMeshV(RDCenum type, RDCint nu, RDCenum uwrap,
  323.         RDCint nv, RDCenum vwrap,
  324.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  325.     rdcNurb(RDCint uorder, const RDCfloat *uknot, RDCfloat umin,
  326.         RDCfloat umax, RDCint vorder, const RDCfloat *vknot,
  327.         RDCfloat vmin, RDCfloat vmax, ...),
  328.     rdcNurbV(RDCint uorder, const RDCfloat *uknot, RDCfloat umin,
  329.         RDCfloat umax, RDCint vorder, const RDCfloat *vknot,
  330.         RDCfloat vmin, RDCfloat vmax,
  331.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  332.     rdcNurbMesh(RDCint nu, RDCint uorder, const RDCfloat *uknot, RDCfloat umin,
  333.         RDCfloat umax, RDCint nv, RDCint vorder, const RDCfloat *vknot,
  334.         RDCfloat vmin, RDCfloat vmax, ...),
  335.     rdcNurbMeshV(RDCint nu, RDCint uorder, const RDCfloat *uknot, RDCfloat umin,
  336.         RDCfloat umax, RDCint nv, RDCint vorder, const RDCfloat *vknot,
  337.         RDCfloat vmin, RDCfloat vmax,
  338.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms);
  339.  
  340. extern RDCvoid
  341.     rdcSphere(RDCfloat radius, RDCfloat zmin, RDCfloat zmax,
  342.         RDCfloat tmax, ...),
  343.     rdcSphereV(RDCfloat radius, RDCfloat zmin, RDCfloat zmax, RDCfloat tmax,
  344.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  345.     rdcCone(RDCfloat radius, RDCfloat height, RDCfloat zmax, RDCfloat tmax,
  346.         ...),
  347.     rdcConeV(RDCfloat radius, RDCfloat height, RDCfloat zmax, RDCfloat tmax,
  348.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  349.     rdcCylinder(RDCfloat radius, RDCfloat zmin, RDCfloat zmax,
  350.         RDCfloat tmax, ...),
  351.     rdcCylinderV(RDCfloat radius, RDCfloat zmin, RDCfloat zmax, RDCfloat tmax,
  352.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  353.     rdcHyperboloid(const RDCfloat *point1, const RDCfloat *point2,
  354.         RDCfloat tmax, ...),
  355.     rdcHyperboloidV(const RDCfloat *point1, const RDCfloat *point2,
  356.         RDCfloat tmax, RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  357.     rdcParaboloid(RDCfloat rmax, RDCfloat zmin, RDCfloat zmax,
  358.         RDCfloat tmax, ...),
  359.     rdcParaboloidV(RDCfloat rmax, RDCfloat zmin, RDCfloat zmax, RDCfloat tmax,
  360.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  361.     rdcDisk(RDCfloat innerradius, RDCfloat outerradius,
  362.         RDCfloat tmax, ...),
  363.     rdcDiskV(RDCfloat innerradius, RDCfloat outerradius,
  364.         RDCfloat tmax,
  365.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  366.     rdcTorus(RDCfloat majrad, RDCfloat minrad,
  367.         RDCfloat phimin, RDCfloat phimax, RDCfloat tmax, ...),
  368.     rdcTorusV(RDCfloat majrad, RDCfloat minrad, RDCfloat phimin,
  369.         RDCfloat phimax, RDCfloat tmax,
  370.         RDCint n, const RDCquark *quarks, RDCvoid *const *parms),
  371.     rdcProcedural(RDCvoid *data, const RDCfloat *bound,
  372.         RDCsubdivideFunc subdivfunc, RDCfreeFunc freefunc);
  373.  
  374. extern RDCobject
  375.     *rdcObjectBegin(void);
  376.  
  377. extern RDCvoid
  378.     rdcObjectEnd(void),
  379.     rdcObjectCall(const RDCobject *handle);
  380.  
  381. extern RDCvoid
  382.     rdcErrorHandler(RDCenum severitymask, RDCenum handler),
  383.     rdcCustomErrorHandler(RDCenum severitymask, RDCerrorFunc handler);
  384.  
  385. extern RDCint
  386.     rdcLastError(void);
  387.  
  388. extern RDCvoid
  389.     rdcComment(const char *fmt, ...);
  390.  
  391. #ifdef __cplusplus
  392. }
  393. #endif
  394.  
  395. /* Cubic Patch Basis Steps */
  396. #define RDC_BEZIER_STEP      3
  397. #define RDC_BSPLINE_STEP     1
  398. #define RDC_CATMULLROM_STEP  1
  399. #define RDC_HERMITE_STEP     2
  400. #define RDC_POWER_STEP       4
  401.  
  402. /* Error Codes */
  403. #define RDC_NOERROR          0
  404.  
  405. #define RDC_NOMEM            1  /* Out of memory */
  406. #define RDC_INCAPABLE        2  /* Unavailable Commercial RDC feature */
  407. #define RDC_BUG              3  /* Probably a bug in renderer */
  408. #define RDC_NESTING          4  /* Bad begin-end nesting */
  409. #define RDC_NOTPARAMS        5  /* Invalid state for parameters */
  410. #define RDC_NOTATTRIBS       6  /* Invalid state for attribs */
  411. #define RDC_NOTPRIMS         7  /* Invalid state for primitives */
  412. #define RDC_ILLSTATE         8  /* Other invalid state */
  413. #define RDC_BADENUM          9  /* Invalid enumerator for request */
  414. #define RDC_RANGE           10  /* Parameter out of range */
  415. #define RDC_CONSISTENCY     11  /* Parameters inconsistent */
  416. #define RDC_BADHANDLE       12  /* Bad object/light handle */
  417. #define RDC_MISSINGDATA     13  /* Required parameters not provided */
  418. #define RDC_SYNTAX          14  /* Declare type syntax error */
  419. #define RDC_MATH            15  /* Zerodivide, noninvert matrix, etc. */
  420.  
  421. #endif
  422.